define(['bootstrap'],function(bootstrap){

	//js获取项目根路径，如： http://localhost:8083/uimcardprj
	function getRootPath(){
	    //获取当前网址，如： http://localhost:8083/uimcardprj/share/meun.jsp
	    var curWwwPath=window.document.location.href;
	    //获取主机地址之后的目录，如： uimcardprj/share/meun.jsp
	    var pathName=window.document.location.pathname;
	    var pos=curWwwPath.indexOf(pathName);
	    //获取主机地址，如： http://localhost:8083
	    var localhostPaht=curWwwPath.substring(0,pos);
	    //获取带"/"的项目名，如：/uimcardprj
	    var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
//	    return(localhostPaht+projectName);
	    return(projectName);
	};

	//JS实现将数字金额转换为大写人民币汉字的方法
	function num2ChMoney(money) {
	  //汉字的数字
	  var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
	  //基本单位
	  var cnIntRadice = new Array('', '拾', '佰', '仟');
	  //对应整数部分扩展单位
	  var cnIntUnits = new Array('', '万', '亿', '兆');
	  //对应小数部分单位
	  var cnDecUnits = new Array('角', '分', '毫', '厘');
	  //整数金额时后面跟的字符
	  var cnInteger = '整';
	  //整型完以后的单位
	  var cnIntLast = '元';
	  //最大处理的数字
	  var maxNum = 999999999999999.9999;
	  //金额整数部分
	  var integerNum;
	  //金额小数部分
	  var decimalNum;
	  //输出的中文金额字符串
	  var chineseStr = '';
	  //分离金额后用的数组，预定义
	  var parts;
	  if (money == '') { return ''; }
	  money = parseFloat(money);
	  if (money >= maxNum) {
	    //超出最大处理数字
	    return '';
	  }
	  if (money == 0) {
	    chineseStr = cnNums[0] + cnIntLast + cnInteger;
	    return chineseStr;
	  }
	  //转换为字符串
	  money = money.toString();
	  if (money.indexOf('.') == -1) {
	    integerNum = money;
	    decimalNum = '';
	  } else {
	    parts = money.split('.');
	    integerNum = parts[0];
	    decimalNum = parts[1].substr(0, 4);
	  }
	  //获取整型部分转换
	  if (parseInt(integerNum, 10) > 0) {
	    var zeroCount = 0;
	    var IntLen = integerNum.length;
	    for (var i = 0; i < IntLen; i++) {
	      var n = integerNum.substr(i, 1);
	      var p = IntLen - i - 1;
	      var q = p / 4;
	      var m = p % 4;
	      if (n == '0') {
	        zeroCount++;
	      } else {
	        if (zeroCount > 0) {
	          chineseStr += cnNums[0];
	        }
	        //归零
	        zeroCount = 0;
	        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
	      }
	      if (m == 0 && zeroCount < 4) {
	        chineseStr += cnIntUnits[q];
	      }
	    }
	    chineseStr += cnIntLast;
	  }
	  //小数部分
	  if (decimalNum != '') {
	    var decLen = decimalNum.length;
	    for (var i = 0; i < decLen; i++) {
	      var n = decimalNum.substr(i, 1);
	      if (n != '0') {
	        chineseStr += cnNums[Number(n)] + cnDecUnits[i];
	      }
	    }
	  }
	  if (chineseStr == '') {
	    chineseStr += cnNums[0] + cnIntLast + cnInteger;
	  } else if (decimalNum == '') {
	    chineseStr += cnInteger;
	  }
	  return chineseStr;
	}
	

	/**
	 ** 加法函数，用来得到精确的加法结果
	 ** 说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
	 ** 调用：accAdd(arg1,arg2)
	 ** 返回值：arg1加上arg2的精确结果
	 **/
	function accAdd(arg1, arg2) {
	    var r1, r2, m, c;
	    try {
	        r1 = arg1.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r1 = 0;
	    }
	    try {
	        r2 = arg2.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r2 = 0;
	    }
	    c = Math.abs(r1 - r2);
	    m = Math.pow(10, Math.max(r1, r2));
	    if (c > 0) {
	        var cm = Math.pow(10, c);
	        if (r1 > r2) {
	            arg1 = Number(arg1.toString().replace(".", ""));
	            arg2 = Number(arg2.toString().replace(".", "")) * cm;
	        } else {
	            arg1 = Number(arg1.toString().replace(".", "")) * cm;
	            arg2 = Number(arg2.toString().replace(".", ""));
	        }
	    } else {
	        arg1 = Number(arg1.toString().replace(".", ""));
	        arg2 = Number(arg2.toString().replace(".", ""));
	    }
	    return (arg1 + arg2) / m;
	}

	//给Number类型增加一个add方法，调用起来更加方便。
//		Number.prototype.accAdd = function (arg1, arg2) {
//		    return accAdd(arg1, arg2);
//		};		
	
	/**
	 ** 减法函数，用来得到精确的减法结果
	 ** 说明：javascript的减法结果会有误差，在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。
	 ** 调用：accSub(arg1,arg2)
	 ** 返回值：arg1加上arg2的精确结果
	 **/
	function accSub(arg1, arg2) {
	    var r1, r2, m, n;
	    try {
	        r1 = arg1.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r1 = 0;
	    }
	    try {
	        r2 = arg2.toString().split(".")[1].length;
	    }
	    catch (e) {
	        r2 = 0;
	    }
	    m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
	    n = (r1 >= r2) ? r1 : r2;
	    return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
	}

	// 给Number类型增加一个sub方法，调用起来更加方便。
//		Number.prototype.accSub = function (arg1, arg2) {
//		    return accSub(arg1, arg2);
//		};		
	
	
	/**
	 ** 乘法函数，用来得到精确的乘法结果
	 ** 说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
	 ** 调用：accMul(arg1,arg2)
	 ** 返回值：arg1乘以 arg2的精确结果
	 **/
	function accMul(arg1, arg2) {
	    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
	    try {
	        m += s1.split(".")[1].length;
	    }
	    catch (e) {
	    }
	    try {
	        m += s2.split(".")[1].length;
	    }
	    catch (e) {
	    }
	    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
	}

	// 给Number类型增加一个mul方法，调用起来更加方便。
//		Number.prototype.accMul = function (arg1, arg2) {
//		    return accMul(arg1, arg2);
//		};
	
	
	/** 
	 ** 除法函数，用来得到精确的除法结果
	 ** 说明：javascript的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
	 ** 调用：accDiv(arg1,arg2)
	 ** 返回值：arg1除以arg2的精确结果
	 **/
	function accDiv(arg1, arg2) {
	    var t1 = 0, t2 = 0, r1, r2;
	    try {
	        t1 = arg1.toString().split(".")[1].length;
	    }
	    catch (e) {
	    }
	    try {
	        t2 = arg2.toString().split(".")[1].length;
	    }
	    catch (e) {
	    }
	    with (Math) {
	        r1 = Number(arg1.toString().replace(".", ""));
	        r2 = Number(arg2.toString().replace(".", ""));
	        return (r1 / r2) * pow(10, t2 - t1);
	    }
	}

	//给Number类型增加一个div方法，调用起来更加方便。
//		Number.prototype.accDiv = function (arg1, arg2) {
//		    return accDiv(arg1, arg2);
//		};
	

	
    var hello = function(s){
    	console.log('hi!'+s);
    };
    
	var getDataColumns = function(data) {
		var columns = {};
		$.each(data.defCols, function(key){
			columns[key] = {
				"name" : data.defCols[key]["name"],
				"type" : data.defCols[key]["type"]
			};
		});
		return columns;
	};
    
	//获取url中的参数
	var getUrlParam = function (name) {
	  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
	  var r = window.location.search.substr(1).match(reg);  //匹配目标参数
	  if (r != null) return unescape(r[2]); return null; //返回参数值
	};
	
	
	
	//处理collapse
	var initCollapseProducts = function (){
	//	var url=window.location.href;
	//	alert(url);
		var param=getUrlParam('g');
	//	alert('param-->'+param);
		
		/*
		if(param=='collapseZero'){
			$("#collapseZero").collapse({toggle:true});
		}
		if(param=='collapseOne'){
	//		alert('param-->'+param);
			$("#collapseOne").collapse('show');
		}
		*/
		
		//循环获取对象
		var objs=$(".collapse");
	//	alert('objs.length-->'+objs.length);
		for(var i=0;i<objs.length;i++){
	//		alert(objs[i].id+"----->"+param);
			
			if(objs[i].id==param){
	//			alert('param-->'+param);
	//			objs[i].collapse('show');
				$('#'+objs[i].id).collapse('show');
			}else{
	//			objs[i].collapse('hide');
	//			$('#'+objs[i].id).collapse('hide');
			}
			
		}
		
	//	var objs=$("div");
	//	for(var i=0;i<objs.length;i++){
	//		alert(objs[i]);
	//	}
		
	};
	
	
	
	//去掉左边的空白  
	var trimLeft = function (s){  
	    if(s == null) {  
	        return "";  
	    }  
	    var whitespace = new String(" \t\n\r");  
	    var str = new String(s);  
	    if (whitespace.indexOf(str.charAt(0)) != -1) {  
	        var j=0, i = str.length;  
	        while (j < i && whitespace.indexOf(str.charAt(j)) != -1){  
	            j++;  
	        }  
	        str = str.substring(j, i);  
	    }  
	    return str;  
	};  
	
	//去掉右边的空白 www.2cto.com   
	var trimRight = function (s){  
	    if(s == null) return "";  
	    var whitespace = new String(" \t\n\r");  
	    var str = new String(s);  
	    if (whitespace.indexOf(str.charAt(str.length-1)) != -1){  
	        var i = str.length - 1;  
	        while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){  
	           i--;  
	        }  
	        str = str.substring(0, i+1);  
	    }  
	    return str;  
	};
	
	
	
	//供使用者调用  
	var trim = function (s){  
	  return trimRight(trimLeft(s));  
	};  
	
	var guid = function() {
	    var guid = "";
	    for (var i = 1; i <= 32; i++){
	      var n = Math.floor(Math.random()*16.0).toString(16);
	      guid +=   n;
	      /*
	      if((i==8)||(i==12)||(i==16)||(i==20))
	        guid += "-";
	      */
	    }
	    return guid;    
		
	};
	
	var uuid = function() {
	    var s = [];
	    var hexDigits = "0123456789abcdef";
	    for (var i = 0; i < 36; i++) {
	        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
	    }
	    s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
	    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
//	    s[8] = s[13] = s[18] = s[23] = "-";

	    var uuid = s.join("");
	    /*
	    uuid = uuid.replace('-','');
	    uuid = uuid.replace('-','');
	    uuid = uuid.replace('-','');
	    uuid = uuid.replace('-','');
	    */
	    return uuid;
	};

	var preZeroFill = function(num, size) {
	    if (num >= Math.pow(10, size)) { //如果num本身位数不小于size位
	        return num.toString();
	    } else {
	        var _str = Array(size + 1).join('0') + num;
	        return _str.slice(_str.length - size);
	    }
	};

	this.padLeft = function (str,lenght){ 
		if(str.length >= lenght) 
		return str; 
		else 
		return padLeft("0" +str,lenght); 
	};
		
	this.padRight = function (str,lenght){ 
		if(str.length >= lenght) 
		return str; 
		else 
		return padRight(str+"0",lenght); 
	};
	
	//日期加上天数得到新的日期
	//dateTemp 需要参加计算的日期，days要添加的天数，返回新的日期，日期格式：YYYY-MM-DD
	this.getNewDay = function (dateTemp, days) {
	    var dateTemp = dateTemp.split("-");
	    var nDate = new Date(dateTemp[1] + '-' + dateTemp[2] + '-' + dateTemp[0]); //转换为MM-DD-YYYY格式  
	    var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000);
	    var rDate = new Date(millSeconds);
	    var year = rDate.getFullYear();
	    var month = rDate.getMonth() + 1;
	    if (month < 10) month = "0" + month;
	    var date = rDate.getDate();
	    if (date < 10) date = "0" + date;
	    return (year + "-" + month + "-" + date);
	};
	
	return{
		hello:hello
		,getDataColumns:getDataColumns
		,getUrlParam:getUrlParam
		,initCollapseProducts:initCollapseProducts
		,trimLeft:trimLeft
		,trimRight:trimRight
		,trim:trim
		,getUUID:uuid
		,getGUID:guid
		,num2ChMoney:num2ChMoney
		,accAdd:accAdd
		,accSub:accSub
		,accMul:accMul
		,accDiv:accDiv
		,preZeroFill:preZeroFill
		,getRootPath:getRootPath
		,padLeft:padLeft
		,padRight:padRight
		,getNewDay:getNewDay
	}


});

